package com.niu.advice;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

/**
 * @Author 鹅鹅鹅
 * @Version 1.0.0
 * @Date 2025/7/19 12:45
 * @Description 增强通知类
 */
@Component
@Aspect
public class MyAspect {

    // 定义切点重复使用
    @Pointcut("execution(* com.niu.service.impl.*.*(..))")
    public void pc(){}

    @Around("pc()")
    public Object totalTime(ProceedingJoinPoint pjp) throws Throwable {
        // 方法执行前增强
        long start = System.currentTimeMillis();
        // 原方法执行
        Object result = pjp.proceed();
        // 方法执行后增强
        long end = System.currentTimeMillis();
        System.out.println(pjp.getSignature().getDeclaringTypeName() + " 类中的 " + pjp.getSignature().getName() + " 方法用时: " + (end - start) / 1000.0 + " 秒=====================================================================================================================================================================================================================================================================");
        return result;
    }

    @Before("pc()")
    public void myBefore(JoinPoint jp){
        System.out.println("目标方法执行前运行===============================================================================================================================================================================================================================================================================================================================");
    }

    // 使用注解匹配切入点, 增强DeptService 接口下查询和删除相关的方法
    @After("@annotation(com.niu.anno.MyFlag)")
    public void myAfter(JoinPoint jp){
        System.out.println("目标方法执行后运行===============================================================================================================================================================================================================================================================================================================================");
    }

}
